/***************************************************
 @Name :        1196kk0
 @Time :        2025-05-26
 @Email :       2232506563@qq.com
 @Comment :     systick定时器 系统延时
 @FileName :    drivers_Systick.c
 @Version :     4.0
****************************************************/

#include "drivers_Systick.h"

static uint16_t fs_us=0;
static uint16_t fs_ms=0;

/***************************************
函数名：systick_config
函数功能：对systick定时器初始化
输入参数：systick频率
输出参数：无
其它：systick频率=168
****************************************/
void systick_config(uint32_t systick)
{
	SysTick->CTRL &= ~0x05;
	fs_us = systick/8;//计1us需要计次数
	fs_ms = fs_us*1000;////计1ms需要计次数
}

/***************************************
函数名：delay_us
函数功能：微秒级延时
输入参数：延时微秒数值
输出参数：无
其它：无
****************************************/
void delay_us(uint32_t us)
{
	uint32_t temp=0;
	SysTick->LOAD = fs_us*us;
	SysTick->CTRL |= 0x01;
	do
	{
		temp = SysTick->CTRL;
	}
	while (!(temp&(0x01<<16)));
	SysTick->CTRL &= ~0x01;
	SysTick->VAL = 0;
}

/***************************************
函数名：delay_ms
函数功能：毫秒级延时
输入参数：延时毫秒数值
输出参数：无
其它：无
****************************************/
void delay_ms(uint32_t ms)
{
    uint32_t temp=0;
	uint8_t systick_flag=0;
	while(systick_flag == 0)
	{
		if(ms>798)
		{
			SysTick->LOAD = fs_ms*798;
			ms = ms-798;
		}
		else
		{
			SysTick->LOAD = fs_ms*ms;
			systick_flag = 1;
		}
		SysTick->CTRL |= 0x01;
		do
		{
			temp = SysTick->CTRL;
		}
		while (!(temp&(0x01<<16)));
		SysTick->CTRL &= ~0x01;
		SysTick->VAL = 0;
	}
}


